perm filename WIX2SB.FAI[VIS,HPM]5 blob
sn#155617 filedate 1975-04-22 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00014 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE WIX2SB
C00003 00003 AR2TAB: MOVEI T,44 TOTAL BITS/WORD
C00005 00004 HAFPIC: POP P,RETAD
C00009 00005 GETPAR: POP P,RETAD
C00010 00006 PERBIT: POP P,RETAD
C00011 00007 HISTOG: POP P,RETAD
C00013 00008 ROWSUM: POP P,RETAD
C00014 00009 ROWSUD: POP P,RETAD much quicker and dirtier than ROWSUM
C00015 00010 CMPPAR: POP P,RETAD
C00019 00011 COPPIC: POP P,RETAD COPIES A PICTURE IN PIC1
C00020 00012 CORNR←←TEMP THESE FOUR WORDS MUST
C00022 00013 X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D
C00031 00014 END
C00032 ENDMK
C⊗;
TITLE WIX2SB
;FULLY FORMAT 2 ORIENTED PICTURE ROUTINES. EXTENSIONS TO THE CONVERTED
;FORMAT 1 ROUTINES IN WIXSUB
ENTRY HAFPIC,COPPIC,MATCH,GETPAR,PERBIT,HISTOG,CMPPAR,ROWSUM,ROWSUD
EXTERN CORGET,CORREL,SQRS
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BPTAB←←12
LINTAB←←13
T←1 ↔ TT←2 ↔ TTT←3 ↔ ARRY1←4 ↔ ARRY2←5 ↔ P←17
A←6 ↔ B←7 ↔ C←10 ↔ D←11 ↔ E←13 ↔ F←14 ↔ G←15
RETAD: 0
TEMP: BLOCK 25 ;TEMPORARY STORAGE FOR STUFF
AR2TAB: MOVEI T,44 ;TOTAL BITS/WORD
IDIV T,BYBI(ARRY2) ;BYTE SIZE
MOVEM T,WDBY(ARRY2) ;BYTES PER WORD
SUBI TT,44 ;-NUMBER OF USED BITS/WORD
MOVNM TT,WDBI(ARRY2) ;SAVED
ADD T,LNBY(ARRY2)
SUBI T,1
IDIV T,WDBY(ARRY2) ;NUMBER OF WORDS/SCANLINE
MOVEM T,LNWD(ARRY2)
MOVE TT,T ;WORDS/LINE
IMUL TT,WDBY(ARRY2) ;BYTES/WORD
MOVEM TT,LNBYA(ARRY2) ;GIVES BYTES/LINE, INCLUDING NULLS
IMUL TT,PCLN(ARRY2)
MOVEM TT,PCBYA(ARRY2) ;TOTAL BYTES/PIC, INCL. NULLS
IMUL T,PCLN(ARRY2) ;LINES IN THE PICTURE
MOVEM T,PCWD(ARRY2) ;WORDS IN THE PICTURE
MOVE T,LNBY(ARRY2)
IMUL T,PCLN(ARRY2)
MOVEM T,PCBY(ARRY2) ;BYTES/PIC, NOT INCL. NULLS
MOVEI T,14(ARRY2)
ADD T,PCLN(ARRY2)
MOVEM T,BPTAB(ARRY2) ;ADDRESS OF BYTE POINTER TABLE
ADD T,LNBYA(ARRY2) ;ADDR OF FIRST WORD IN PICTURE
MOVN TT,PCLN(ARRY2) ;SET UP CNTR FOR LINE ADDRESSES
HRL TT,TT
HRRI TT,LINTAB(ARRY2)
LTLP: MOVEM T,(TT) ;MAKE LINE TABLE
ADD T,LNWD(ARRY2)
AOBJN TT,LTLP
MOVN TT,BPTAB(ARRY2)
HRL TT,LNBYA(ARRY2) ;SET UP CNTR FOR BYTE TABLE
AOBJN TT, ;DECR ADDRESS AND INCR COUNT BY 1
MOVN TT,TT
MOVEI T,4400
ADD T,BYBI(ARRY2)
LSH T,6
HRLZ T,T
BYLP: MOVEM T,(TT) ;MAKE BYTE POINTER TABLE
IBP T
AOBJN TT,BYLP
POPJ P,
HAFPIC: POP P,RETAD
POP P,G ;MAXBIT
POP P,ARRY2 ;MAKES A HALFSIZE VERSION
POP P,ARRY1 ;OF A PICTURE
MOVE T,LNBY(ARRY1) ;HAFPIC(PICIN,PICOUT,BITMAX);
ASH T,-1 ;NEW PIC IS HALF THE WIDTH
MOVEM T,LNBY(ARRY2)
MOVE T,PCLN(ARRY1)
ASH T,-1 ;AND HALF THE HEIGHT
MOVEM T,PCLN(ARRY2)
MOVE T,BYBI(ARRY1)
ADDI T,2 ;AND HAS TWO MORE BITS/PIXEL
SUB G,T ;UNLESS LIMITED TO LESS
JUMPGE G,.+2
ADD T,G
MOVEM T,BYBI(ARRY2)
PUSHJ P,AR2TAB ;SET UP ITS SKELETON
MOVE A,BPTAB(ARRY1)
MOVE A,-1(A) ;FIRST BYTE PNTR FOR ARRY1
ADD A,LINTAB(ARRY1)
MOVE B,BPTAB(ARRY2)
MOVE B,-1(B) ;AND FIRST BP FOR ARRY2
ADD B,LINTAB(ARRY2)
MOVE F,PCLN(ARRY2) ;NO OF LINES, FOR COUNT
;IF NOT NEEDED TO REDUCE BITS/BYTE
JUMPGE G,[ LNLP: MOVE TTT,LNBY(ARRY2) ;NO OF BYTES, INNER LOOP CNTR
MOVE C,A
ADD A,LNWD(ARRY1) ;BP S FOR ARRY1
MOVE D,A
ADD A,LNWD(ARRY1)
MOVE E,B ;BP FOR ARRY2
ADD B,LNWD(ARRY2)
CLLP: ILDB T,C ;FETCH FOUR BYTES AND ADD THEM
ILDB TT,C
ADD T,TT
ILDB TT,D
ADD T,TT
ILDB TT,D
ADD T,TT
IDPB T,E ;THEN DEPOSIT SUM
SOJG TTT,CLLP
SOJG F,LNLP
JRST @RETAD ]
LNLP1: MOVE TTT,LNBY(ARRY2) ;NO OF BYTES, INNER LOOP CNTR
MOVE C,A
ADD A,LNWD(ARRY1) ;BP S FOR ARRY1
MOVE D,A
ADD A,LNWD(ARRY1)
MOVE E,B ;BP FOR ARRY2
ADD B,LNWD(ARRY2)
CLLP1: ILDB T,C ;FETCH FOUR BYTES AND ADD THEM
ILDB TT,C
ADD T,TT
ILDB TT,D
ADD T,TT
ILDB TT,D
ADD T,TT
LSH T,(G) ;TRUNCATE TO CORRECT # OF BITS
IDPB T,E ;THEN DEPOSIT SUM
SOJG TTT,CLLP1
SOJG F,LNLP1
JRST @RETAD
GETPAR: POP P,RETAD
POP P,ARRY2 ;COPIES A FULL WORD ARRAY
POP P,ARRY1 ;INTO A PICTURE
MOVE B,BPTAB(ARRY2)
MOVE B,-1(B) ;AND FIRST BP FOR ARRY2
ADD B,LINTAB(ARRY2)
MOVE F,PCLN(ARRY2) ;NO OF LINES, FOR COUNT
LNLPG: MOVE TTT,LNBY(ARRY2) ;NO OF BYTES, INNER LOOP CNTR
MOVE E,B ;BP FOR ARRY2
ADD B,LNWD(ARRY2)
CLLPG: MOVE T,(ARRY1) ;FETCH A WORD
ADDI ARRY1,1
IDPB T,E ;AND DEPOSIT A BYTE
SOJG TTT,CLLPG
SOJG F,LNLPG
JRST @RETAD
PERBIT: POP P,RETAD
POP P,ARRY2 ;transform ;TRANSFORMS EACH SAMPLE OF A
POP P,ARRY1 ;picture ;PICTURE ACCORDING TO A TABLE
HRRM ARRY2,ARF
MOVE B,BPTAB(ARRY1)
MOVE B,-1(B) ;AND FIRST BP FOR ARRY2
ADD B,LINTAB(ARRY1)
MOVE F,PCLN(ARRY1) ;NO OF LINES, FOR COUNT
LNLPP: MOVE TTT,LNBY(ARRY1) ;NO OF BYTES, INNER LOOP CNTR
MOVE E,B ;BP FOR ARRY2
ADD B,LNWD(ARRY1)
CLLPP: ILDB T,E ;FETCH A SAMPLE
ARF: MOVE T,(T) ;altered to <ARRY2>(T)
DPB T,E ;AND DEPOSIT IT
SOJG TTT,CLLPP
SOJG F,LNLPP
JRST @RETAD
HISTOG: POP P,RETAD
POP P,ARRY2 ;HISTOGRAM ;MAKES A HISTOGRAM OF THE
POP P,ARRY1 ;picture ;GREY LEVELS IN A PICTURE
HRRM ARRY2,ARFG
HRRM ARRY2,ARFH
MOVEI A,1
LSH A,@BYBI(ARRY1)
SUBI A,1
ARFH: SETZM (A) ;CLEAR THE ARRAY
SOJGE A,ARFH
MOVE B,BPTAB(ARRY1)
MOVE B,-1(B) ;AND FIRST BP FOR ARRY2
ADD B,LINTAB(ARRY1)
MOVE F,PCLN(ARRY1) ;NO OF LINES, FOR COUNT
LNLPH: MOVE TTT,LNBY(ARRY1) ;NO OF BYTES, INNER LOOP CNTR
MOVE E,B ;BP FOR ARRY2
ADD B,LNWD(ARRY1)
CLLPH: ILDB T,E ;FETCH A SAMPLE
ARFG: AOS (T) ;altered to <ARRY2>(T)
SOJG TTT,CLLPH
SOJG F,LNLPH
JRST @RETAD
ROWSUM: POP P,RETAD
POP P,ARRY2 ;ROW SUMS ;calculates the sum of each row of a pict
POP P,ARRY1 ;picture
HRRM ARRY2,ARFS
MOVE B,BPTAB(ARRY1)
MOVE B,-1(B) ;AND FIRST BP FOR ARRY2
ADD B,LINTAB(ARRY1)
MOVE F,PCLN(ARRY1) ;NO OF LINES, FOR COUNT
LNLPS: MOVE TTT,LNBY(ARRY1) ;NO OF BYTES, INNER LOOP CNTR
MOVE E,B ;BP FOR ARRY2
ADD B,LNWD(ARRY1)
SETZM @ARFS
CLLPS: ILDB T,E ;FETCH A SAMPLE
ARFS: ADDM T,0 ;altered to <ARRY2>(TTT)
SOJG TTT,CLLPS
AOS ARFS
SOJG F,LNLPS
JRST @RETAD
ROWSUD: POP P,RETAD ;much quicker and dirtier than ROWSUM
POP P,ARRY2 ;ROW SUMS ;roughly calculates row sums
POP P,ARRY1 ;picture
SUBI ARRY2,1
MOVN B,LNWD(ARRY1)
MOVE TTT,LINTAB(ARRY1)
MOVE F,PCLN(ARRY1) ;NO OF LINES, FOR COUNT
LNLPD: HRL TTT,B ;NO OF WORDS, INNER LOOP CNTR
MOVEI TT,0
CLLPD: HLRZ T,(TTT) ;FETCH A SAMPLE, SORT OF
ADD TT,T
AOBJN TTT,CLLPD
PUSH ARRY2,TT
SOJG F,LNLPD
JRST @RETAD
CMPPAR: POP P,RETAD
POP P,ARRY2 ;picture y ;compares two pictures
POP P,ARRY1 ;picture x ;sigma(xi-yi)↑2/n
MOVE B,BPTAB(ARRY1)
MOVE B,-1(B) ;FIRST BP FOR ARRY1
ADD B,LINTAB(ARRY1)
MOVE C,BPTAB(ARRY2)
MOVE C,-1(C) ;AND FIRST BP FOR ARRY2
ADD C,LINTAB(ARRY2)
MOVEI A,0 ;INITIALIZE SUM
MOVE G,PCLN(ARRY1) ;NO OF LINES, FOR COUNT
LNLPC: MOVE TTT,LNBY(ARRY1) ;NO OF BYTES, INNER LOOP CNTR
MOVE E,B ;BP FOR ARRY2
ADD B,LNWD(ARRY1)
MOVE F,C
ADD C,LNWD(ARRY2)
CLLPC: ILDB T,E ;FETCH A SAMPLE
ILDB TT,F
SUB T,TT
ADD A,SQRS(T) ;and add (xi-yi)↑2 to A
SOJG TTT,CLLPC
SOJG G,LNLPC
IDIV A,PCLN(ARRY1)
IDIV A,LNBY(ARRY1)
MOVE 1,A
JRST @RETAD
COPPIC: POP P,RETAD ;COPIES A PICTURE IN PIC1
POP P,ARRY2 ;INTO PIC2 (THE LINE TABLE MUST
POP P,ARRY1 ;BE ADJUSTED TO DO THIS)
HRLZ T,ARRY1 ; COPPIC(PIC1,PIC2)
HRR T,ARRY2
MOVEI TT,13(ARRY2)
ADD TT,PCLN(ARRY1)
ADD TT,LNBYA(ARRY1)
ADD TT,PCWD(ARRY1)
BLT T,(TT)
MOVE T,ARRY2
SUB T,ARRY1
MOVN TT,PCLN(ARRY1)
SUBI TT,1
HRLZ TT,TT
HRRI TT,BPTAB(ARRY2)
COPLP: ADDM T,(TT)
AOBJN TT,COPLP
JRST @RETAD
CORNR←←TEMP ;THESE FOUR WORDS MUST
HORIZ←←TEMP+1 ;BE KEPT IN THIS ORDER
CENTR←←TEMP+2
VERTI←←TEMP+3
WHERTO: BYTE (2)0,3,3,0,1,2,2,1,1,2,2,1,0,3,3,0
WHERPN: POINT 2,WHERTO
VERCNT←←TEMP+4
HORCNT←←TEMP+5
FLAPIC: POP P,RETAD ;HIGH PASS FILTER WITH A CUTOFF
POP P,ARRY1 ;1/FREQUENCY APPROIMATELY HALF THE
SETZM CORNR
SETZM HORIZ
SETZM VERTI
SETZM CENTR
MOVE T,PCLN(ARRY1) ;WIDTH AND HEIGHT OF THE PICTURE,
MOVE TT,T ;MAINLY TO REMOVE THE EFFECTS
ASH T,-2 ;OF COS↑2 DARKENING AT THE EDGES
MOVEM T,VERCNT ; FLAPIC(PICTURE)
MOVE T,LNBY(ARRY1)
ASH T,-2 ;THE LIMITS OF EACH GRID POINT
MOVEM T,HORCNT
X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D
AX1←←TEMP ↔ AY1←←TEMP+1 ↔ AX2←←TEMP+2 ↔ AY2←←TEMP+3
BX1←←TEMP+4 ↔ BY1←←TEMP+5 ↔ BX2←←TEMP+6 ↔ BY2←←TEMP+7
SOUWIN←←TEMP+10 ↔ DESWIN←←TEMP+11 ↔ DEXSKP←←TEMP+12 ↔ DEYSKP←←TEMP+13
WSIZ1←←TEMP+14 ↔ DWSIZ←←TEMP+15 ↔ WSIZY1←←TEMP+16 ↔ VARIAN←←TEMP+17
SOUSIZ←←TEMP+20 ↔ WSIZ←←TEMP+21 ↔ DWSIZ←←TEMP+22
MATCH: POP P,RETAD
POP P,BX2 ;A CORRELATOR. FINDS THE BEST MATCH
POP P,BY2 ;TO RECTANGLE ARRY1(AX1:AX2,AY1:AY2)
POP P,BX1 ;IN ARRY2(BX1:BY1,BX2:BY2)
POP P,BY1 ;ALL ARGUMENT ARE BY REFERENCE. THE
POP P,ARRY2 ;A'S AND B'S MAY BE ADJUSTED TO MAKE
MOVE X1,@BX1 ;THINGS FIT
MOVE X2,@BX2 ; MATCH(PIC1,AX1,AY1,AX2,AY2,
MOVE Y1,@BY1 ; PIC2,BX1,BY1,BX2,BY2);
MOVE Y2,@BY2
FIXB: CAMLE X1,X2 ;FIRST FIX UP THE LIMITS SO
EXCH X1,X2 ;X1≤X2, X1≥0 X2<WIDTH ETC.
CAIGE X1,0
MOVEI X1,0
MOVE T,LNBY(ARRY2)
CAML X2,T
MOVEI X2,-1(T)
CAMLE Y1,Y2 ;SIMILAR FOR Y
EXCH Y1,Y2
CAIGE Y1,0
MOVEI Y1,0
MOVE T,PCLN(ARRY2)
CAML Y2,T
MOVEI Y2,-1(T)
CAMG X1,X2
CAMLE Y1,Y2
JRST FIXB
MOVEM X1,@BX1
MOVEM X2,@BX2
MOVEM Y1,@BY1
MOVEM Y2,@BY2
POP P,AX2 ;DO SAME FOR SOURCE WINDOW
POP P,AY2
POP P,AX1
POP P,AY1
POP P,ARRY1
MOVE X1,@AX1
MOVE X2,@AX2
MOVE Y1,@AY1
MOVE Y2,@AY2
FIXA: CAMLE X1,X2 ;FIRST FIX UP THE LIMITS SO
EXCH X1,X2 ;X1≤X2, X1≥0 X2<WIDTH ETC.
CAIGE X1,0
MOVEI X1,0
MOVE T,LNBY(ARRY1)
CAML X2,T
MOVEI X2,-1(T)
CAMLE Y1,Y2 ;SIMILAR FOR Y
EXCH Y1,Y2
CAIGE Y1,0
MOVEI Y1,0
MOVE T,PCLN(ARRY1)
CAML Y2,T
MOVEI Y2,-1(T)
CAMG X1,X2
CAMLE Y1,Y2
JRST FIXA
MOVE T,@BX1 ;SHRINK SOURCE WINDOW SYMMETRICALLY
SUB T,@BX2 ;UNTIL IT IS NO
ADD T,X2 ;LARGER THAN DESTINATION WINDOW
SUB T,X1
JUMPLE T,YSHRNK
MOVEI TT,1(T)
ASHC T,-1
ADDI X1,(T)
SUBI X2,(TT)
YSHRNK: MOVE T,@BY1 ;SHRINK IN Y DIRECTION
SUB T,@BY2 ;UNTIL IT IS NO
ADD T,Y2 ;LARGER THAN DESTINATION WINDOW
SUB T,Y1
JUMPLE T,RESTA
MOVEI TT,1(T)
ASHC T,-1
ADDI Y1,(T)
SUBI Y2,(TT)
RESTA: MOVEM X1,@AX1
MOVEM Y1,@AY1
MOVEM X2,@AX2
MOVEM Y2,@AY2
THIS←←TT ↔ SIZ←←TTT
MOVEI SIZ,1(X2) ;CALCULATE SIZE OF BUFFER AREA
SUB SIZ,X1 ;FOR THE SOURCE WINDOW CODE
MOVEM SIZ,WSIZ1 ;WILL BE X WINDOWSIZE-1
MOVEM SIZ,WSIZ ;IS X WINDOWSIZ
MOVNM SIZ,DEXSKP ;WILL BE DELTA XB - DELTA XA
MOVEI T,1(Y2)
SUB T,Y1
MOVEM T,WSIZY1 ;WILL BE X WINDOWSIZE-1
MOVNM T,DEYSKP ;WIL BE DELTA YB - DELTA YA
IMUL SIZ,T
MOVEM SIZ,SOUSIZ ;SOURCE WINDOW SIZE (IN PIXELS)
ASH SIZ,1
ADDI SIZ,1
PUSHJ P,CORGET ;AND MAKE THAT BUFFER
HALT
MOVEM THIS,SOUWIN
SUBI THIS,1
MOVN T,T
HRLZ T,T
HRRI T,LINTAB(ARRY1) ;Y COUNTER
ADD T,Y1
MOVE 0,@BX2 ;FINISH UP MAKING DELTA XB -DELTA XA
SUB 0,@BX1
ADDI 0,1
MOVEM 0,DWSIZ
ADDM 0,DEXSKP
MOVE 0,@BY2 ;AND THE Y'S TOO
SUB 0,@BY1
ADDI 0,1
ADDM 0,DEYSKP
SOS WSIZ1 ;NOT TO MENTION X WINDOWSIZ-1
SOS WSIZY1 ;AND Y WINDOWSIZ-1
MOVE G,[MOVN TT,0(T)]
MOVE E,BPTAB(ARRY1) ;BP SKELETON
ADDI E,-1(X1)
MOVE E,(E)
SETZB B,A ;FOR SUM OF X AND X↑2, AS EXPLND BELOW
;DON'T FORGET! A,B,C,D ARE X1,X2,Y1,Y2 ALSO
ILYLP: MOVE F,E ;SETS UP IN LINE CODED
ADD F,(T) ;STUFF FOR THE INNER
MOVE TTT,WSIZ ;"LOOP" OF THE CORRELATION
ILXLP: PUSH THIS,G ;A SEQUENCE OF
ADDI G,1 ; MOVN TT,POSB(T)
ILDB C,F ; ADD A,SQRS+PIXEL(TT)
ADD B,C
ADD A,SQRS(C)
ADD C,[ADD A,SQRS(TT)]
PUSH THIS,C
SOJG TTT,ILXLP
ADD G,DEXSKP
AOBJN T,ILYLP
PUSH THIS,[JRST INRDON] ;AND THE FINAL INSTR.
;CALCULATE SUM[(X-XBAR)↑2] ALSO. THIS IS SAME AS SUM[X↑2-2 X XBAR+XBAR↑2],
;WHICH IS SUM[X↑2]-2 XBAR SUM[X]+XBAR↑2*N OR, SINCE XBAR=SUM[X]/N,
;SUM[X↑2]-2(SUM[X])↑2/N+(SUM[X])↑2/N WHICH IS SUM[X↑2]-(SUM[X])↑2/N
; THIS QUANTITY WILL BE CALLED VARIANCE
IMUL B,B
IDIV B,SOUSIZ
SUB A,B
MOVEM A,VARIAN
MOVE X1,@BX1 ;MAKE THE DESTINATION
MOVE X2,@BX2 ;WINDOW BUFFER
MOVE Y1,@BY1
MOVE Y2,@BY2
MOVEI SIZ,1(X2)
SUB SIZ,X1
MOVEM SIZ,DWSIZ
MOVEI T,1(Y2)
SUB T,Y1
IMUL SIZ,T
PUSHJ P,CORGET
HALT
MOVEM THIS,DESWIN
SUBI THIS,1
MOVN T,T ;Y COUNTER
HRLZ T,T
HRRI T,LINTAB(ARRY2)
ADD T,Y1
MOVE E,BPTAB(ARRY2) ;BYTE POINTER SKELETON
ADDI E,-1(X1) ;FOR DESTINATION
MOVE E,(E)
BUYLP: MOVE F,E ;UNPACKS THE DESTINATION
ADD F,(T) ;WINDOW, ONE WORD/SAMPLE
MOVE TTT,DWSIZ
BUXLP: ILDB 0,F
PUSH THIS,0
SOJG TTT,BUXLP
AOBJN T,BUYLP
MOVN B,DEXSKP ;NOW ACTUALLY CORRELATE
SUBI B,1
HRLZI D,377777 ;VALUE OF BEST MATCH IN D
MOVE E,DESWIN ;LOCATION IN E
MOVE C,DEYSKP ;NUMBER OF ROWS
MOVE T,DESWIN ;WHERE TO START
CRYLP: HRL T,B ;INIT X CNTR, BUT KEEP OLD POSN
CRXLP: MOVEI A,0 ;ACCUMULATE CURRENT SUM IN A
JRST @SOUWIN ;JUMP TO PREVIOUSLY CREATED CODE
INRDON: CAML A,D ;SEE IN NEW SUM IS BETTER
JRST .+3
MOVE D,A ;IF SO, RECORD IT
HRRZ E,T
AOBJN T,CRXLP ;SHIFT IN X, AND TRY AGAIN
ADD T,WSIZ1 ;ADD WHATS NEEDED TO GET TO NEXT
SOJGE C,CRYLP ;SCANLINE, AND TRY AGAIN
SUB E,DESWIN ;DECOMPOSE SAVED BEST LOCATION
IDIV E,DWSIZ ;INTO X AND Y PARTS
ADDB E,@BY1 ;ACTUAL LOWER Y BOUND OF BEST MATCH
ADDB F,@BX1 ;ACTUAL LOWER X BOUND OF BEST MATCH
ADD F,WSIZ1 ;COMPUTE UPPER X BOUND
MOVEM F,@BX2 ;AND RETURN IT
ADD E,WSIZY1 ;UPPER Y BOUND
MOVEM E,@BY2 ;RETURNED
MOVE THIS,SOUWIN ;RETURN THE USED CORAGE
PUSHJ P,CORREL
MOVE THIS,DESWIN
PUSHJ P,CORREL
MOVE 1,D ;GET READY TO RETURN VALUE OF MATCH
ASH 1,4 ;SCALE IT UP BY 2↑4
IDIV 1,VARIAN ;NORMALIZE
JRST @RETAD ;AND RETURN
END